package com.ac.scum.log.web.model.ftp.controller;

import com.ac.common.core.result.Result;
import com.ac.scum.log.bean.ServerFTPFIle;
import com.ac.scum.log.web.model.ftp.service.ServerFTPFileService;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import jakarta.servlet.http.HttpServletResponse;
import lombok.AllArgsConstructor;
import org.springframework.web.bind.annotation.*;

import java.io.*;

/**
 * 服务器FTP文件。
 */
@RestController
@RequestMapping("server/ftp/file")
@AllArgsConstructor
public class ServerFTPFileController {

    private final ServerFTPFileService serverFTPFileService;

    /**
     * 获取文件列表的分页信息。
     *
     * @param current 当前页码，表示需要返回的页码。
     * @param size 每页显示的记录数。
     * @return 返回一个包含文件列表的分页信息的结果对象。其中，结果对象的代码为Result，数据部分为Page<ServerFTPFIle>类型。
     */
    @GetMapping("page/{current}/{size}")
    public Result<Page<ServerFTPFIle>> getListPage(@PathVariable("current") Integer current, @PathVariable("size") Integer size) {
        return Result.ok(serverFTPFileService.page(new Page<>(current, size)));
    }

    /**
     * 下载指定ID的文件。
     *
     * @param fileId 需要下载的文件的ID，通过URL路径变量传递。
     * @param response HTTP响应对象，用于设置响应头信息并输出文件内容。
     * @throws IOException 如果读取或写入文件过程中发生IO错误。
     */
    @PostMapping("download/{fileId}")
    public void downloadFile(@PathVariable Long fileId, HttpServletResponse response) throws IOException {
        String filePath = "task-log" + File.separator + fileId;
        response.setHeader("Content-Disposition", "attachment; filename=\"" + fileId + "\"; charset=UTF-16LE");
        try (InputStream inputStream = new FileInputStream(filePath);
             OutputStream outputStream = response.getOutputStream()) {
            byte[] buffer = new byte[1024];
            int bytesRead;
            while ((bytesRead = inputStream.read(buffer)) != -1) {
                outputStream.write(buffer, 0, bytesRead);
            }
        }
    }
}
